package xyz.bali16.application.service;


import com.baomidou.mybatisplus.extension.service.IService;
import xyz.bali16.application.entity.Menu;
import xyz.bali16.application.entity.Role;
import xyz.bali16.application.model.role.RoleAddParam;
import xyz.bali16.application.model.role.RoleMenuUpdateParam;
import xyz.bali16.application.model.role.RoleUpdateParam;

import java.util.List;

public interface RoleService extends IService<Role> {

    /**
     * 判断角色编号是否存在
     * @param roleCode 角色编号
     * @return 是否存在
     */
    boolean exist(String roleCode);

    /**
     * 添加角色
     * @param param 添加参数
     * @throws Exception Exception 异常
     */
    void addRole(RoleAddParam param) throws Exception;

    /**
     * 修改角色
     * @param param 修改参数
     * @throws Exception 异常
     */
    void updateRole(RoleUpdateParam param) throws Exception;

    /**
     * 删除角色
     * @param roleId 角色id
     * @throws Exception 删除角色异常
     */
    void deleteRole(String roleId) throws Exception;


    /**
     * 修改角色状态
     * @param roleId 角色id
     * @param status 角色状态
     * @throws Exception 修改异常
     */
    void updateStatus(String roleId, Integer status) throws Exception;

    /**
     * 修改角色权限
     * @param param  修改角色权限bean
     */
    void updateRoleMenu(RoleMenuUpdateParam param) throws Exception;

    /**
     * 根据角色id查询菜单集合
     *
     * @param roleId
     * @return list
     */
    List<Menu> findMenusByRoleId(String roleId);

    /**
     * 根据角色id保存分配权限
     *
     * @param roleId
     * @param menuIdsList
     */
    void addRoleMenu(String roleId, List<String> menuIdsList);

    /**
     * 根据用户名判断用户是否为管理员
     * @param username
     * @return
     */
    boolean isAdmin(String username);
}
